package model;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.wutka.jox.JOXBeanInputStream;
import com.wutka.jox.JOXBeanOutputStream;

public class Cheque
{
	private Long numero;

	private String nomeEmissor;

	private String bancoEmissor;

	private Integer contaCorrenteEmissor;

	private Integer agenciaEmissor;

	private String nomeFavorecido;

	private String bancoFavorecido;

	private Integer contaCorrenteFavorecido;

	private Integer agenciaFavorecido;

	private Date data;

	private Double valor;

	private String status;

	public Cheque()
	{

	}

	public Long getNumero()
	{
		return this.numero;
	}

	public void setNumero(Long numero)
	{
		this.numero = numero;
	}

	public String getNomeEmissor()
	{
		return this.nomeEmissor;
	}

	public void setNomeEmissor(String nomeEmissor)
	{
		this.nomeEmissor = nomeEmissor;
	}

	public String getBancoEmissor()
	{
		return this.bancoEmissor;
	}

	public void setBancoEmissor(String bancoEmissor)
	{
		this.bancoEmissor = bancoEmissor;
	}

	public Integer getContaCorrenteEmissor()
	{
		return this.contaCorrenteEmissor;
	}

	public void setContaCorrenteEmissor(Integer contaCorrenteEmissor)
	{
		this.contaCorrenteEmissor = contaCorrenteEmissor;
	}

	public Integer getAgenciaEmissor()
	{
		return this.agenciaEmissor;
	}

	public void setAgenciaEmissor(Integer agenciaEmissor)
	{
		this.agenciaEmissor = agenciaEmissor;
	}

	public String getNomeFavorecido()
	{
		return this.nomeFavorecido;
	}

	public void setNomeFavorecido(String nomeFavorecido)
	{
		this.nomeFavorecido = nomeFavorecido;
	}

	public String getBancoFavorecido()
	{
		return this.bancoFavorecido;
	}

	public void setBancoFavorecido(String bancoFavorecido)
	{
		this.bancoFavorecido = bancoFavorecido;
	}

	public Integer getContaCorrenteFavorecido()
	{
		return this.contaCorrenteFavorecido;
	}

	public void setContaCorrenteFavorecido(Integer contaCorrenteFavorecido)
	{
		this.contaCorrenteFavorecido = contaCorrenteFavorecido;
	}

	public Integer getAgenciaFavorecido()
	{
		return this.agenciaFavorecido;
	}

	public void setAgenciaFavorecido(Integer agenciaFavorecido)
	{
		this.agenciaFavorecido = agenciaFavorecido;
	}

	public Double getValor()
	{
		return this.valor;
	}

	public void setValor(Double valor)
	{
		this.valor = valor;
	}

	public Date getData()
	{
		return this.data;
	}

	public void setData(Date data)
	{
		this.data = data;
	}

	public String getStatus()
	{
		return this.status;
	}

	public void setStatus(String status)
	{
		this.status = status;
	}

	public void generateXMLFile()
	{
		try
		{
			DateFormat df = new SimpleDateFormat("ddMMyyyy");
			File file = new File("ch_" + this.getNumero() + "_" + this.getBancoEmissor() + "_" + df.format(new Date()) + ".xml");
			FileOutputStream xmlFile = new FileOutputStream(file);
			JOXBeanOutputStream jox = new JOXBeanOutputStream(xmlFile);
			jox.writeObject("cheque", this);

		}
		catch (IOException e)
		{
			e.printStackTrace();
		}

	}

	public String descontar()
	{
		String resposta = "ERROR";
		File contaCorrente = new File("cc_" + this.getAgenciaEmissor() + "_" + this.getContaCorrenteEmissor() + ".xml");
		
		try
		{

			if (contaCorrente.exists())
			{
				
				JOXBeanInputStream joxIn = new JOXBeanInputStream(new FileInputStream(contaCorrente));

				ContaCorrente cc = (ContaCorrente) joxIn.readObject(ContaCorrente.class);
				
				if(cc.getSaldo() > this.getValor())
				{
					cc.setSaldo(cc.getSaldo() - this.getValor());
					cc.generateXMLFile();					
					resposta = "OK";					
				}
				
			}
			
		} catch (Exception e)
		{
			e.printStackTrace();
		}
		
		return resposta;
	}
}
